/**
 * 
 */

var registerErrors = new Array();
registerErrors["USERNAME_BLANK"] = { divPos: "user", msj: "Complete el nombre de usuario" };
registerErrors["USERNAME_TOOSHORT"] = { divPos: "user", msj: "El nombre de usuario es demasiado corto. Debe tener al menos 8 caracteres" };
registerErrors["USERNAME_EXISTS"] = { divPos: "user", msj: "El nombre de usuario ya existe en el sistema" };
registerErrors["FIRSTNAME_BLANK"] = { divPos: "firstName", msj: "Complete el nombre" };
registerErrors["LASTNAME_BLANK"] = { divPos: "lastName", msj: "Complete los apellidos" };
registerErrors["EMAIL_BLANK"] = { divPos: "email1", msj: "Complete el email" };
registerErrors["EMAIL_INCORRECT"] = { divPos: "email1", msj: "El email tiene un formato incorrecto" };
registerErrors["EMAILS_UNMATCHED"] = { divPos: "email2", msj: "Los emails no coinciden" };
registerErrors["VEHICLETYPE_BLANK"] = { divPos: "vehicleType", msj: "Complete el tipo de vehículo" };
registerErrors["GPSFETCHTIME_BLANK"] = { divPos: "fetchGpsLapseTime", msj: "Complete el intervalo de envío de datos GPS" };
registerErrors["GPSFETCHTIME_INCORRECT"] = { divPos: "fetchGpsLapseTime", msj: "El intervalo de envío de datos GPS tiene un formato incorrecto" };
registerErrors["GPSFETCHTIME_TOOBIG"] = { divPos: "fetchGpsLapseTime", msj: "El intervalo de envío de datos GPS es demasiado alto. Debe encontrarse entre 1000 y 5000 milisegundos" };
registerErrors["GPSFETCHTIME_TOOSMALL"] = { divPos: "fetchGpsLapseTime", msj: "El intervalo de envío de datos GPS es demasiado bajo. Debe encontrarse entre 1000 y 5000 milisegundos" };
registerErrors["NEWPASSWORD_BLANK"] = { divPos: "password1", msj: "Complete la contraseña" }; 
registerErrors["NEWPASSWORD_PERSONALDATAINCLUDED"] = { divPos: "password1", msj: "La contraseña incluye datos personales que la hacen poco segura" };
registerErrors["NEWPASSWORD_TOOSHORT"] = { divPos: "password1", msj: "La contraseña es demasiado corta. Debe terne al menos 8 caracteres" };
registerErrors["NEWPASSWORDS_UNMATCHED"] = { divPos: "password2", msj: "Las contraseñas no coinciden" };
registerErrors["NEWPASSWORD_CARACTERSNOTALLOWED"] = { divPos: "password1", msj: "La contraseña contiene caracteres no permitidos" };
registerErrors["NEWPASSWORD_CARACTERSNOTMIXED"] = { divPos: "password1", msj: "La contraseña debe contener al menos tres de los tipos de caracteres siguientes: letras minúsculas, letras mayúsculas, dígitos y caracteres speciales (coma, punto, guión, subrayado, almohadilla)" };

$(document).ready(function() {
	
	$("#btn-user-register").click(function() {
		registerUser();
	});
	
});

function registerUser() {
	var formData = $.formDataToArray($("#frmRegister"));
	var req = JSON.stringify({"user": formData });
	
	$.ajax({
	    url : "../rest/users/register",
	    type: "POST",
	    contentType: "application/json",
	    data : req,
	    dataType: "json",
	    success: function(data, textStatus, jqXHR) {
	        processUserRegisterResult(data);
	    },
	    error: function (jqXHR, textStatus, errorThrown) {
	 
	    }
	});
}

function processUserRegisterResult(ulr) {
	$("[id ^= div-user-register-error]").hide();
	
	if(ulr.responseSuccessful){
		loginUser(ulr.user.userName, ulr.user.password);
	} else {
		$.each(ulr.responseErrors, function(index, value) {
			var error = registerErrors[value];
			if(error != undefined) {
				$("#div-user-register-error-" + error.divPos).html(error.msj).show();
			} else {
				$("#div-user-register-error-unknown").html("Ha ocurrido un error desconocido en la validación de los datos [" + value + "].<br>Por favor, inténtelo de nuevo pasados unos minutos.").show();
			}
			
		});
	}
}

function loginUser(user, pwd) {
	$.ajax({
	    url : "../rest/users/login",
	    type: "POST",
	    contentType: "application/json",
	    data : JSON.stringify({ 
		    		"userName": user,
		    		"password": pwd
		    	}),
	    dataType: "json",
	    success: function(data, textStatus, jqXHR) {
	    	document.cookie = "geoserverudima.userId="+data.userSession.userId;
			document.cookie = "geoserverudima.sessionToken="+data.userSession.sessionToken;
			window.location = "mobileEmulatorLogin.jsp";
	    },
	    error: function (jqXHR, textStatus, errorThrown) {
	 
	    }
	});
}

function processResponseErrors(response) {
	var successful = response.responseSuccessful; 
	if(!successful) {
		//TODO paint user session errors
		alert(response.responseErrors);
	}
	return successful;
}

